/**
 * @Description : customExportExcel.js
 * @Author : PANRUSEN
 * @CreateDate : 2015年11月3日
 * @TODO
 * 
 *	导出excel组件 
 */

;(function($, win) {
	
	var CustomTmr;
	
	var CustomExport ;
	if(CustomExport){
		CustomExport = null;
	}
	CustomExport = function(settings){
		this.options = $.extend({}, {
			tableId : null,
			tableNm : null
		}, settings);
	}
	
	//客户端组件对象注册属性
	CustomExport.prototype = {
			iExport : function(){
				
				var opts = this.options,
					tableid = opts.tableId;
				
				var tableToExcel = (function() {
					var uri = 'data:application/vnd.ms-excel;base64,',
					 	template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">'
					 		+ '<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/>' 
					 		+ '</x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="Content-Type" charset=utf-8"></head>'
					 		+ '<body><table>{table}</table></body></html>',
						base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },
						format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }); }
						
						return function(table, name) {
							if (!table.nodeType) table = document.getElementById(table);
							var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML};
							//window.location.href = uri + base64(format(template, ctx))
							var a = document.createElement('a');
							a.download = opts.tableNm ? opts.tableNm : new Date().getTime();
							a.href = uri + base64(format(template, ctx));
							a.click();
						  };
					})();
				
				try {
					var fname = null;
					// 整个表格拷贝到EXCEL中
					if (this.getExplorer() == 'ie') {
						var curTbl = document.getElementById(tableid);
						var oXL = new ActiveXObject("Excel.Application");
						// 创建AX对象excel
						var oWB = oXL.Workbooks.Add();
						// 获取workbook对象
						var xlsheet = oWB.Worksheets(1);
						// 激活当前sheet
						var sel = document.body.createTextRange();
						sel.moveToElementText(curTbl);
						// 把表格中的内容移到TextRange中
						sel.select();
						// 全选TextRange中内容
						sel.execCommand("Copy");
						// 复制TextRange中内容
						xlsheet.Paste();
						// 粘贴到活动的EXCEL中
						oXL.Visible = true;
						// 设置excel可见属性
						try {
							fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
						} catch (e) {
							print("Nested catch caught " + e);
						} finally {
							oWB.SaveAs(fname);
							oWB.Close(savechanges = false);
							// xls.visible = false;
							oXL.Quit();
							oXL = null;
							// 结束excel进程，退出完成
							CustomTmr = window.setInterval(function(){
								this.Cleanup();
							}, 1);
						}
					} else {
						tableToExcel(tableid);
					}
					return true;
				} catch (e) {
					return false;
				}
			},
			getExplorer : function() {
				
				var explorer = window.navigator.userAgent;
				
				if (explorer.indexOf("MSIE") >= 0) {// ie
					return 'ie';
				} else if (explorer.indexOf("Firefox") >= 0) {// firefox
					return 'Firefox';
				} else if (explorer.indexOf("Chrome") >= 0) {// Chrome
					return 'Chrome';
				} else if (explorer.indexOf("Opera") >= 0) {// Opera
					return 'Opera';
				} else if (explorer.indexOf("Safari") >= 0) {// Safari
					return 'Safari';
				}
			},
			Cleanup : function(){
				window.clearInterval(CustomTmr);
				CollectGarbage();
			}
	};
	
	$.extend({
		exportExcel : function(settings){
			
			if(!settings.tableId){
				return;
			}
			
			var opts = $.extend({}, {
				tableId : null,
				tableNm : null
			}, settings);
			
			var agent = new CustomExport(opts);
			var rest = agent.iExport();
			
			win.setTimeout(function(){
				if(typeof settings.exportCall == 'function'){
					settings.exportCall(rest);
				}
			}, 50)
		}
	});

})(jQuery, window);